redis

您所在的位置:网站首页 redis set结构remove无效 redis

redis

2024-07-02 15:57| 来源: 网络整理| 查看: 265

目录

 

1、windows下连接服务端

2、关闭服务

3、常见数据类型操作指令

3.1、Stirng类型常见操作

3.1.1 10秒后过期,过期之后返回nil,ex表示秒,px表示毫秒

3.1.2 key存在创建返回1,不存在返回0

3.1.3 批量设置和批量获取mset和mget

3.1.4 对数值的操作incr加1、decr减一,incrby加n,decrby减n,incrbyfloat浮点数加

3.1.5 追加字符串append指令

3.1.6 获取字符串长度strlen

3.1.7 截取字符串GETRANGE ,[a,b]

3.1.8 redis内部编码object encoding

3.1.9 键值设计:业务名:对象名:id:[属性]

3.2 哈希hash数据的常见操作

3.2.1 添加\获取

3.2.2 删除

3.2.3 返回对象有几个值

3.2.4 批量设置和获取

3.2.5 断 field 是否存在

3.2.6 获取所有 field、获取所有value、获取所有field和value

3.2.7 自增自减

3.2.8 内部编码

3.2.9 常用场景

3.3 list常用操作

3.3.1 增加删除操作图解

3.3.2 删除固定数量的元素

3.3.3 元素保留ltrim,修改某个元素的值

3.4 set集合常用操作

3.4.1 set集合特点

3.4.2 常见操作

3.4.3 集合的交、并、补集操作

3.4.5 保存交、并、补集到新的集合

3.4.6 内部编码

3.4.7 set适合的使用场景

3.5 zset有序集合

3.5.1 常见操作增删查改

3.5.2 交集、并集、补集常用操作

3.5.3 zset内部编码

3.5.4 使用场景

1、windows下连接服务端 redis-cli.exe -h 127.0.0.1 -p 6379 -a 123456 2、关闭服务 停止 redis 服务: redis-cli shutdown 3、常见数据类型操作指令 3.1、Stirng类型常见操作 3.1.1 10秒后过期,过期之后返回nil,ex表示秒,px表示毫秒 127.0.0.1:6379> set age 23 ex 3 OK 127.0.0.1:6379> get age "23" 127.0.0.1:6379> get age (nil) 3.1.2 key存在创建返回1,不存在返回0 127.0.0.1:6379> setnx name test (integer) 1 127.0.0.1:6379> setnx name test (integer) 0 127.0.0.1:6379> 3.1.3 批量设置和批量获取mset和mget 127.0.0.1:6379> mset country china city beijing OK 127.0.0.1:6379> mget country city adress 1) "china" 2) "beijing" 3) (nil) 127.0.0.1:6379> 3.1.4 对数值的操作incr加1、decr减一,incrby加n,decrby减n,incrbyfloat浮点数加 127.0.0.1:6379> set age 12 OK 127.0.0.1:6379> incr age (integer) 13 127.0.0.1:6379> decr age (integer) 12 127.0.0.1:6379> incrby age 2 (integer) 14 127.0.0.1:6379> decrby age 2 (integer) 12 127.0.0.1:6379> set score 1.1 OK 127.0.0.1:6379> incrbyfloat score 1.1 "2.2" 3.1.5 追加字符串append指令 127.0.0.1:6379> get name "test" 127.0.0.1:6379> append name world (integer) 9 127.0.0.1:6379> get name "testworld" 3.1.6 获取字符串长度strlen 127.0.0.1:6379> strlen name (integer) 9 127.0.0.1:6379> get name "testworld" 127.0.0.1:6379> 3.1.7 截取字符串GETRANGE ,[a,b] 127.0.0.1:6379> get name "testworld" 127.0.0.1:6379> GETRANGE name 2 3 "st" 127.0.0.1:6379> 3.1.8 redis内部编码object encoding set age 1000 OK 127.0.0.1:6379> set name beij OK 127.0.0.1:6379> object encoding age "int" //8字节返回int 127.0.0.1:6379> object encoding name "embstr" //《=39字节,返回embstr 127.0.0.1:6379> set a fsdfwerwerwefffffffffffffffffffffffffffdsf OK 127.0.0.1:6379> object encoding a "raw"//>39字节返回raw 127.0.0.1:6379> 3.1.9 键值设计:业务名:对象名:id:[属性] 127.0.0.1:6379> set order:user:1 1 OK 127.0.0.1:6379> ser order:user:2 2 3.2 哈希hash数据的常见操作   field 和 value 的映射表, hash 特适合用 是一个 string 类型的 field 和 value 的映射表, hash 特适合用于存储对象。 3.2.1 添加\获取 类似于java的set操作了,指令:hset key field value 127.0.0.1:6379> hset user:1 name henry (integer) 1 127.0.0.1:6379> hset user:1 age 12 (integer) 1 127.0.0.1:6379> hset user:1 address hubei (integer) 1 127.0.0.1:6379> hget user:1 name "henry" 127.0.0.1:6379> hget user:1 age "12" 127.0.0.1:6379> hget user:1 adress (nil) 3.2.2 删除 127.0.0.1:6379> hdel user:1 address (integer) 1 3.2.3 返回对象有几个值 127.0.0.1:6379> hlen user:1 (integer) 2 3.2.4 批量设置和获取 127.0.0.1:6379> hmset user:2 name 123 age 12 OK 127.0.0.1:6379> hmget user:2 name age 1) "123" 2) "12" 127.0.0.1:6379> 3.2.5 断 field 是否存在 若存在返回 1 ,不存在返回 0 127.0.0.1:6379> hexists user:1 name (integer) 1 127.0.0.1:6379> hexists user:1 xxx (integer) 0 3.2.6 获取所有 field、获取所有value、获取所有field和value 127.0.0.1:6379> hkeys user:2 1) "name" 2) "age" 127.0.0.1:6379> hvals user:2 1) "123" 2) "12" 127.0.0.1:6379> hgetall user:2 1) "name" 2) "123" 3) "age" 4) "12" 3.2.7 自增自减 增加 1 : hincrby user:2 age 1 127.0.0.1:6379> hgetall user:2 1) "name" 2) "123" 3) "age" 4) "12" 127.0.0.1:6379> hincrby user:2 age 2 3.2.8 内部编码 内部编码: ziplist 和 hashtable 当 field 个数少且没有大的 value 时,内部编码为 ziplist 127.0.0.1:6379> object encoding user:2 "ziplist" 127.0.0.1:6379> 当 value 大于 64 字节,内部编码由 ziplist 变成 hashtable 3.2.9 常用场景 三种方案实现用户信息存储优缺点:

1,存储对象set user:1:name aaa;

优点:简单直观,每个键对应一个值 缺点:键数过多,占用内存多,用户信息过于分散,不用于生产环境

2,将对象序列化存入 redis

set user:1 serialize(userInfo); 优点:编程简单,若使用序列化合理内存使用率高 缺点:序列化与反序列化有一定开销,更新属性时需要把 userInfo 全取出来 进行反序列化,更新后再序列化到 redis

3,使用 hash 类型:

hmset user:1 name james age 23 sex boy 优点:简单直观,使用合理可减少内存空间消耗 缺点:要控制 ziplist 与 hashtable 两种编码转换,且 hashtable 会消耗更多内存 总结: 对于更新不多的情况下,可以使用序列化,对于 VALUE 值不大于 64 字节 可以使用 hash 类 3.3 list常用操作 3.3.1 增加删除操作图解

类型指令新增lpush,rpush,linsert查找lrange,lindex,llen修改lset删除lpop,rpop,lrem,ltrim阻塞blpop,brpop 添加 127.0.0.1:6379> rpush mylist c b a (integer) 3d 查询所有 127.0.0.1:6379> lrange mylist 0 -1 1) "c" 2) "b" 3) "a" 查询0-1 127.0.0.1:6379> lrange mylist 0 1 1) "c" 2) "b" 左边加入 127.0.0.1:6379> lpush mylist d (integer) 4 127.0.0.1:6379> lrange mylist 0 -1 1) "d" 2) "c" 3) "b" 4) "a" 在固定节点之前加入 127.0.0.1:6379> linsert mylist before b bb (integer) 5 127.0.0.1:6379> lrange mylist 0 -1 1) "d" 2) "c" 3) "bb" 4) "b" 5) "a" 127.0.0.1:6379> lindex mylist -1 "a" 127.0.0.1:6379> lindex mylist -2 "b" 127.0.0.1:6379> lindex mylist -3 "bb" 列表长度 127.0.0.1:6379> llen mylist (integer) 5 127.0.0.1:6379> lrange mylist 0 -1 1) "d" 2) "c" 3) "bb" 4) "b" 5) "a" 删除节点 127.0.0.1:6379> lpop mylist "d" 127.0.0.1:6379> rpop mylist "a" 127.0.0.1:6379> lrange mylist 0 -1 1) "c" 2) "bb" 3) "b" 127.0.0.1:6379> 3.3.2 删除固定数量的元素 127.0.0.1:6379> lpush test b b b b b x y z (integer) 8 127.0.0.1:6379> lrange test 0 -1 1) "z" 2) "y" 3) "x" 4) "b" 5) "b" 6) "b" 7) "b" 8) "b" 从左边开始,删除4个b 127.0.0.1:6379> lrem test 4 b (integer) 4 127.0.0.1:6379> lrange test 0 -1 1) "z" 2) "y" 3) "x" 4) "b" 删除所有的b 127.0.0.1:6379> lrem test 0 b (integer) 1 127.0.0.1:6379> lrange test 0 -1 1) "z" 2) "y" 3) "x" 127.0.0.1:6379> 3.3.3 元素保留ltrim,修改某个元素的值 127.0.0.1:6379> lrange test 0 -1 1) "4" 2) "3" 3) "2" 4) "1" 5) "z" 6) "y" 7) "x" 保留第5个元素到最后一个元素,其他的删除 127.0.0.1:6379> ltrim test 4 -1 OK 127.0.0.1:6379> lrange test 0 -1 1) "z" 2) "y" 3) "x" 修改第一个元素 127.0.0.1:6379> lset test 0 zz OK 127.0.0.1:6379> lrange test 0 -1 1) "zz" 2) "y" 3) "x" 127.0.0.1:6379> 3.4 set集合常用操作 3.4.1 set集合特点 无序,不重复最多可以存2^23-1除了支持增删查改,还支持几个的交并差集 3.4.2 常见操作

新增sadd

:6379> exists student (integer) 0 127.0.0.1:6379> sadd student a b c c (integer) 3 127.0.0.1:6379> sadd student abc (integer) 1 127.0.0.1:6379> sadd student a b c (integer) 0 127.0.0.1:6379> exists student (integer) 1

查询打印所有元素smembers  

127.0.0.1:6379> SMEMBERS student 1) "c" 2) "a" 3) "b" 4) "abc"

删除指定元素

127.0.0.1:6379> srem student abc (integer) 0 127.0.0.1:6379> SMEMBERS student 1) "c" 2) "a" 3) "b"

统计元素个数scard

127.0.0.1:6379> scard student (integer) 4

判断元素是否存在sismember

127.0.0.1:6379> sismember student a (integer) 1 127.0.0.1:6379> sismember student aa (integer) 0 127.0.0.1:6379> srandmember student 2 1) "b" 2) "a"

返回随机元素srandmember 

127.0.0.1:6379> srandmember student 2 1) "b" 2) "a"

 删除集合中的元素spop

127.0.0.1:6379> sadd user5 1 2 3 (integer) 3 127.0.0.1:6379> spop user5 "1" 127.0.0.1:6379> SMEMBERS user5 1) "2" 2) "3" 127.0.0.1:6379> 3.4.3 集合的交、并、补集操作

初始化两个集合

127.0.0.1:6379> SMEMBERS user1 1) "a" 2) "girl" 3) "24" 127.0.0.1:6379> SMEMBERS user2 1) "b" 2) "24" 3) "boy"

交集sinter

127.0.0.1:6379> sinter user1 user2 1) "24" 127.0.0.1:6379>

并集sunion

127.0.0.1:6379> sunion user1 user2 1) "24" 2) "girl" 3) "boy" 4) "a" 5) "b"

差集sdiff

127.0.0.1:6379> sdiff user1 user2 1) "a" 2) "girl" 127.0.0.1:6379> 3.4.5 保存交、并、补集到新的集合

保存交集到新集合sinterstore

127.0.0.1:6379> sinterstore userinter user1 user2 (integer) 1 127.0.0.1:6379> SMEMBERS userinter 1) "24"

保存并集到新集合sunionstore 

127.0.0.1:6379> sunionstore userunion user1 user2 (integer) 5 127.0.0.1:6379> SMEMBERS userunion 1) "24" 2) "girl" 3) "boy" 4) "a" 5) "b" 127.0.0.1:6379>

保存补集到新集合sdiffstore 

127.0.0.1:6379> sdiffstore userdiff user1 user2 (integer) 2 127.0.0.1:6379> SMEMBERS userdiff 1) "a" 2) "girl" 127.0.0.1:6379> 3.4.6 内部编码 当元素个数少(小于 512 个)且都为整数,redis 使用 intset 减少内存的使用 当超过 512 个或不为整数(比如 a b)时,编码为 hashtable 127.0.0.1:6379> sadd user4 a (integer) 1 127.0.0.1:6379> object encoding user4 "hashtable" 127.0.0.1:6379> sadd user5 1 2 3 (integer) 3 127.0.0.1:6379> object encoding user5 "intset" 127.0.0.1:6379> 3.4.7 set适合的使用场景 查询共同爱好,使用交集给标签、点赞添加用户使用spop,srandmember随机获取数据,比如抽奖等 3.5 zset有序集合

特点:有序不重复,使用分值实现排序,适合排行榜,点赞数

数据结构是:score+member 的形式

3.5.1 常见操作增删查改

新增

127.0.0.1:6379> zadd user:zan 200 a 300 b (integer) 2

key必须不存在才能添加成功

127.0.0.1:6379> zadd test:1 nx 100 a (integer) 1 127.0.0.1:6379> zadd test:1 nx 200 a (integer) 0

修改某个member 的score,xx必须存在才能修改成功

127.0.0.1:6379> zadd test:1 xx incr 200 a "300" 127.0.0.1:6379> zadd test:1 xx ch incr -299 a "1" 127.0.0.1:6379> zincrby test:1 10 a

查询member和score

127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "a" 2) "200" 3) "b" 4) "300"

查询所有member  

127.0.0.1:6379> zrange user:zan 0 -1 1) "a" 2) "b"

查看分数score

127.0.0.1:6379> zadd user:zan 200 a 300 b (integer) 2 127.0.0.1:6379> zscore user:zan a "200"

计算元素个数zcard

127.0.0.1:6379> zcard test:1 (integer) 1 127.0.0.1:6379>

新增的数据是根据score排好了顺序的  

127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "a" 2) "200" 3) "b" 4) "300" 5) "c" 6) "300" 7) "d" 8) "400" 127.0.0.1:6379> zadd user:zan 100 e (integer) 1 127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "e" 2) "100" 3) "a" 4) "200" 5) "b" 6) "300" 7) "c" 8) "300" 9) "d" 10) "400" 127.0.0.1:6379>

查询元素b的排行

127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "e" 2) "100" 3) "a" 4) "200" 5) "b" 6) "300" 7) "c" 8) "300" 9) "d" 10) "400" 127.0.0.1:6379> zscore user:zan e "100" 127.0.0.1:6379> zrank user:zan b (integer) 2 127.0.0.1:6379>

反序查找元素的排行

127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "e" 2) "100" 3) "a" 4) "200" 5) "b" 6) "300" 7) "c" 8) "300" 9) "d" 10) "400" 127.0.0.1:6379> zrevrank user:zan d (integer) 0

删除元素zrem 

127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "e" 2) "100" 3) "a" 4) "200" 5) "b" 6) "300" 7) "c" 8) "300" 9) "d" 10) "400" 127.0.0.1:6379> zrem user:zan c (integer) 1 127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "e" 2) "100" 3) "a" 4) "200" 5) "b" 6) "300" 7) "d" 8) "400" 127.0.0.1:6379>

返回指定范围内的score和member,正序和倒叙

127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "e" 2) "100" 3) "a" 4) "200" 5) "b" 6) "300" 7) "d" 8) "400" 127.0.0.1:6379> zrevrange user:zan 0 -1 withscores 1) "d" 2) "400" 3) "b" 4) "300" 5) "a" 6) "200" 7) "e" 8) "100" 127.0.0.1:6379>

返回指定分数范围内的成员zrangebyscore 、zrevrangebyscore 

127.0.0.1:6379> zrevrange user:zan 0 -1 withscores 1) "d" 2) "400" 3) "b" 4) "300" 5) "a" 6) "200" 7) "e" 8) "100" 127.0.0.1:6379> zrangebyscore user:zan 200 300 withscores 1) "a" 2) "200" 3) "b" 4) "300" 127.0.0.1:6379> zrevrangebyscore user:zan 300 100 withscores 1) "b" 2) "300" 3) "a" 4) "200" 5) "e" 6) "100" 127.0.0.1:6379>

返回指定分数范围成员个数zcount 

127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "e" 2) "100" 3) "a" 4) "200" 5) "b" 6) "300" 7) "d" 8) "400" 127.0.0.1:6379> zcount user:zan 200 400 (integer) 3

删除排名范围内元素

127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "e" 2) "100" 3) "a" 4) "200" 5) "b" 6) "300" 7) "d" 8) "400" 127.0.0.1:6379> zremrangebyrank user:zan 0 1 (integer) 2 127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "b" 2) "300" 3) "d" 4) "400" 127.0.0.1:6379>

删除指定分数范围的元素

127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "a" 2) "100" 3) "c" 4) "290" 5) "b" 6) "300" 7) "d" 8) "400" 127.0.0.1:6379> zremrangebyscore user:zan 100 300 (integer) 3 127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "d" 2) "400"

删除指定分数大于100的元素不包括100

127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "a" 2) "100" 3) "b" 4) "200" 5) "c" 6) "300" 7) "d" 8) "400" 127.0.0.1:6379> zremrangebyscore user:5 (100 +inf (integer) 0 127.0.0.1:6379> zremrangebyscore user:zan (100 +inf (integer) 3 127.0.0.1:6379> zrange user:zan 0 -1 withscores 1) "a" 2) "100" 127.0.0.1:6379> 3.5.2 交集、并集、补集常用操作

数据初始化

127.0.0.1:6379> zadd user:1 1 a 2 b 4 c 5 d (integer) 4 127.0.0.1:6379> zadd user:2 2 a 3 b 1 e 8 f (integer) 4

交集,默认member相同,score相加

127.0.0.1:6379> zinterstore user_inter 2 user:1 user:2 (integer) 2 127.0.0.1:6379> zrange user_inter 0 -1 withscores 1) "a" 2) "3" 3) "b" 4) "5"

交集min,member相同,取小的socre

127.0.0.1:6379> zinterstore user_min 2 user:1 user:2 aggregate min (integer) 2 127.0.0.1:6379> zrange user_min 0 -1 withscores 1) "a" 2) "1" 3) "b" 4) "2"

交集max,member相同,取大的socre

127.0.0.1:6379> zinterstore user_max 2 user:1 user:2 aggregate max (integer) 2 127.0.0.1:6379> zrange user_max 0 -1 withscores 1) "a" 2) "2" 3) "b" 4) "3"

weights把两个集合扩大固定倍数再取交集

先把user:1扩大2倍,再把user:2扩大4倍再取交集

127.0.0.1:6379> zinterstore user_weight 2 user:1 user:2 weights 2 4 aggregate max (integer) 2 127.0.0.1:6379> zrange user_weight 0 -1 withscores 1) "a" 2) "8" 3) "b" 4) "12" 127.0.0.1:6379>

并集,具体说明参考上一个

127.0.0.1:6379> zunionstore user_uw 2 user:1 user:2 weights 2 3 aggregate max (integer) 6 127.0.0.1:6379> zrange user_uw 0 -1 withscores 1) "e" 2) "3" 3) "a" 4) "6" 5) "c" 6) "8" 7) "b" 8) "9" 9) "d" 10) "10" 11) "f" 12) "24" 127.0.0.1:6379> 3.5.3 zset内部编码 当元素个数少(小于 128 个),元素值小于 64 字节时, 使用 ziplist 编码,可有效减少内存的使用 大于 128 个元素或元素值大于 64 字节时 3.5.4 使用场景 排行榜:文章点赞排行,视频浏览排行等  

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3